const mysql = require("mysql");
/**
 * mysql数据库连接池
 * @type {{createConnection?, createPool?, createPoolCluster?, createQuery?, escape?, escapeId?, format?, raw?, Types?}}
 */

const pool = mysql.createPool({
    host: 'localhost',          // 主机地址
    port: 3306,                 // 端口
    user: 'root',               // 数据库访问账号
    password: '123456',         // 数据库访问账号
    database: 'nodecms',        // 要访问的数据库
    connectTimeout: 5000,       //连接超时
    multipleStatements: false,  //是否允许一个query中包含多条sql语句
    timezone: "08:00",          // 北京时间东八区【Asia/Shanghai】
});


/**
 * 数据库连接池链接mysql数据库
 * @param sql
 * @param arr
 * @returns {Promise<unknown>}
 */
const connection = function(sql,paramsArr = []){
    return new Promise((resolve,reject) =>{
        pool.getConnection(function(err,connect){
            // 处理链接错误
            if (err) throw err;
            /**
             * 封装操作
             */
            const query = connect.query(sql,paramsArr,function(error,values,fields){
                //事件驱动回调
                // 处理链接错误
                if (error) throw error;
                resolve(values);
                //释放连接
                connect.release();
            });
            console.log("===== sql ========:",query.sql)
        });
    })
};

/**
 * mysql数据库链接
 * @param sql
 * @param callback
 */
const mysqlDao = function(sql,arr = [],callback){
    pool.getConnection(function(err,connect){
        if(err){
            console.log('数据库连接失败');
        }else{
            console.log('数据库连接成功');
            const query = connect.query(sql,arr,function(error,values,fields){
                //释放连接
                connect.release();

                //事件驱动回调
                callback(error,values,fields);
            });
            console.log("===== sql ========:",query.sql)
        }
    });
};


module.exports = {mysqlDao,connection};
